/**
 * 事件总线=>发布订阅者模式
 * @author 赵京涛
 */
export class EventBus {
  static eventListeners;
  getInstance() {
    if (typeof EventBus.instance === 'object') {
      return EventBus.instance
    }
    return new EventBus()
  }
  constructor() {
    if (typeof EventBus.instance === 'object') {
      this.getInstance()
      return EventBus.instance
    }
    EventBus.instance = this
    this.eventListeners = {}
  }
  /**
   * 发送事件
   * @param eventName 事件名 string
   * @param data 要发送的数据
   */
  fireEvent(eventName, data) {
    // 取出当前事件所有的回调函数
    const callbackList = this.eventListeners[eventName]
    if (!callbackList) return console.warn(`${eventName} not found!`)
    // 执行每一个回调函数
    for (const callback of callbackList) {
      callback(data)
    }
  }
  /**
   * 注册事件监听器
   * @param eventName 事件名 string
   * @param listener 监听回调 function
   */
  addListener(eventName, listener) {
    // 初始化这个事件
    if (!this.eventListeners[eventName]) {
      this.eventListeners[eventName] = []
    }
    this.eventListeners[eventName].push(listener)
  }

  /**
   * 移除监听器
   */
  removeListener(listener) {
    Object.keys(this.eventListeners).forEach((s) => {
      const listeners = this.eventListeners[s]
      if (!listeners) return
      for (let i = 0, l = listeners.length; i < l; i++) {
        if (listener === listeners[i]) listeners.splice(i, 1)
      }
    })
  }

  /**
   * 创建静态方法
   * @param eventName
   * @param isShowWaterHandler
   */
  static addListener(eventName, isShowWaterHandler) {

  }

  /**
   * 创建静态方法
   * @param listener
   * @param menuListListener
   */
  static removeListener(listener, menuListListener) {

  }

  /**
   * 创建静态方法
   * @param eventName
   * @param data
   */
  static fireEvent(eventName, data) {

  }
}
